21542
18218
Відповіді на це запитання - зусилля громади. Відредагуйте існуючі відповіді, щоб покращити цю публікацію. Наразі він не приймає нових відповідей або взаємодій.
Я написав неправильну річ у повідомленні коміту.
Як я можу змінити повідомлення? Фіксація ще не просунута. 
Змінення останнього повідомлення коміту
git commit --amend
відкриє ваш редактор, що дозволить вам змінити повідомлення про коміт останнього коміту. Крім того, ви можете встановити повідомлення про фіксацію безпосередньо в командному рядку за допомогою:
git commit --amend -m "Нове повідомлення про коміт"
... однак це може зробити багаторядкові повідомлення комітів або невеликі виправлення більш громіздкими для введення.
Перш ніж робити це, переконайтеся, що у вас немає змін до робочої копії, інакше вони також будуть зафіксовані. (Нестандартні зміни не будуть здійснені.)
Зміна повідомлення про коміт, який ви вже надіслали у віддалену гілку
Якщо ви вже перенесли свій коміт у віддалену гілку, то - після внесення місцевих змін до вашого коміту (як описано вище) - вам також потрібно буде змусити натиснути коміт за допомогою:
git push <віддалене> <галузь> - сила
# Або
git push <віддалене> <галузь> -f
Попередження: примусове натискання замінить віддалену гілку на стан вашої локальної. Якщо на віддаленій гілці є коміти, яких у вашому локальному відділенні немає, ви втратите ці коміти.
Попередження: будьте обережні щодо внесення змін до зобов’язань, якими ви вже ділилися з іншими людьми. Змінення комітів по суті переписує їх на різні ідентифікатори SHA, що створює проблему, якщо інші люди мають копії старого коміту, який ви переписали. Кожному, хто має копію старого коміту, потрібно буде синхронізувати свою роботу з вашим нещодавно переписаним комітом, що іноді може бути важко, тому переконайтеся, що ви координуєтесь з іншими при спробі переписати спільну історію комітів, або просто уникайте переписувати спільні коміти. взагалі.
Виконайте інтерактивне перебазування
Інший варіант - використовувати інтерактивну базу даних.
Це дозволяє редагувати будь-яке повідомлення, яке потрібно оновити, навіть якщо воно не останнє.
Щоб зробити сквош Git, виконайте такі дії:
// n - кількість комітів до останнього коміту, який ви хочете мати можливість редагувати
git rebase -i HEAD ~ n
Після того, як ви стискаєте свої комітети, виберіть e / r для редагування повідомлення:
Важлива примітка про інтерактивну базу даних
Коли ви використовуєте git rebase -i HEAD ~ n, може бути більше n комітів. Git "збере" всі коміти в останніх n комітів, і якщо десь між цим діапазоном було злиття, ви також побачите всі коміти, тому результат буде n +.
Хороша порада:
Якщо вам доводиться робити це більше, ніж для однієї гілки, і ви можете зіткнутися з конфліктами під час внесення змін до вмісту, налаштуйте git rerere і дозвольте Git вирішити ці конфлікти автоматично для вас.
Документація
git-commit (1) Сторінка вручну
git-rebase (1) Сторінка вручну
git-push (1) Сторінка вручну
|
git commit --amend -m "ваше нове повідомлення"
|
Якщо коміт, який ви хочете виправити, не найновіший:
git rebase --interactive $ parent_of_flawed_commit
Якщо ви хочете виправити кілька помилкових комітів, передайте батька найстарішого з них.
З'явиться редактор зі списком усіх комітів, починаючи з того, який ви дали.
Змініть вибір на переформулювання (або на старих версіях Git, на редагування) перед усіма комітами, які ви хочете виправити.
Після збереження Git відтворить перелічені коміти.
Для кожного коміту, який ви хочете переформулювати, Git поверне вас назад у ваш редактор. Для кожного коміту, який ви хочете редагувати, Git опускає вас до оболонки. Якщо ви в оболонці:
Змініть коміт будь-яким способом, який вам подобається.
git commit --amend
git rebase - продовжити
Більшість цієї послідовності буде пояснено вам результатами різних команд під час руху. Це дуже просто; вам не потрібно його запам'ятовувати - просто пам'ятайте, що git rebase --interactive дозволяє виправляти коміти незалежно від того, як давно вони були.
Зверніть увагу, що ви не захочете змінювати коміти, які ви вже натискали. Або, можливо, ви це робите, але в такому випадку вам доведеться з великою обережністю спілкуватися з усіма, хто, можливо, стягував ваші зобов’язання та робив роботу над ними. Як відновити / повторно синхронізувати після того, як хтось надсилає перебазу або скидання до опублікованої гілки?
|
Щоб внести зміни до попереднього коміту, внесіть потрібні зміни, індексуйте їх, а потім запустіть
git commit --amend
Це відкриє файл у вашому текстовому редакторі, що представляє ваше нове повідомлення про коміт. Він починається з тексту із вашого старого повідомлення коміту. Змініть повідомлення про коміт як завгодно, а потім збережіть файл і закрийте редактор, щоб закінчити.
Щоб внести зміни до попереднього коміту та зберегти те саме повідомлення журналу, запустіть
git commit --amend -C HEAD
Щоб виправити попередній коміт, повністю видаливши його, запустіть
git reset --hard HEAD ^
Якщо ви хочете відредагувати більше одного повідомлення коміту, запустіть
git rebase -i HEAD ~ commit_count
(Замініть commit_count на кількість комітів, які потрібно редагувати.) Ця команда запускає ваш редактор. Позначте перший коміт (той, який ви хочете змінити) як “редагувати” замість “вибрати”, а потім збережіть і вийдіть із редактора. Внесіть необхідну зміну, а потім запустіть
git commit --amend
git rebase - продовжити
Примітка: Ви також можете "Внести потрібні зміни" з редактора, відкритого git commit --amend
|
Як вжезгаданий, git commit --amend - це спосіб переписати останній коміт. Одне зауваження: якщо ви хочете також перезаписати файли, команда буде
git commit -a --amend -m "Моє нове повідомлення про коміт"
|
Ви також можете використовувати для цього гіт-фільтр-гілку.
git filter-branch -f --msg-filter "sed 's / errror / error /'" $ flawed_commit..HEAD
Це не так просто, як тривіальний git commit --amend, але особливо корисний, якщо у вас вже є деякі злиття після вашого помилкового повідомлення коміту.
Зверніть увагу, що це спробує переписати кожен коміт між HEAD та дефектним комітом, тому вам слід вибирати команду msg-filter дуже розумно;
|
Я віддаю перевагу цьому:
git коміт --amend -c <ідентифікатор коміту>
В іншому випадку буде новий коміт з новим ідентифікатором коміту.
|
Якщо ви використовуєте інструмент графічного інтерфейсу Git, є кнопка з назвою Змінити останній коміт. Натисніть на цю кнопку, і тоді вона відобразить останні файли комітів та повідомлення. Просто відредагуйте це повідомлення, і ви зможете зафіксувати його за допомогою нового повідомлення коміту.
Або скористайтеся цією командою з консолі / терміналу:
git commit -a --amend -m "Моє нове повідомлення про коміт"
|
Ви можете використовувати перебазування Git. Наприклад, якщо ви хочете змінити назад, щоб зафіксувати bbc643cd, запустіть
$ git rebase bbc643cd ^ --interactive
У редакторі за замовчуванням змініть 'pick' на 'edit' у рядку, коміт якого ви хочете змінити. Внесіть зміни, а потім сценізуйте їх за допомогою
$ git add 
Тепер ви можете використовувати
$ git commit --amend
змінити коміт і після цього
$ git rebase - продовжити
для повернення до попереднього коміту head.
|
Якщо ви хочете змінити лише своє останнє повідомлення про коміт, зробіть:
git commit --amend
Це потрапить у ваш текстовий редактор і дозволить змінити останнє повідомлення коміту.
Якщо ви хочете змінити останні три повідомлення коміту або будь-яке повідомлення коміту до цього моменту, введіть HEAD ~ 3 до команди git rebase -i:
git rebase -i HEAD ~ 3
|
Якщо вам доведеться змінити старе повідомлення про фіксацію за кількома гілками (тобто фіксація з помилковим повідомленням присутня в декількох гілках), ви можете використовувати:
git фільтр-гілка -f --msg-фільтр \
'sed "s / <старе повідомлення> / <нове повідомлення> / g"' - --всі
Git створить тимчасовий каталог для перезапису та додаткового резервного копіювання старих посилань у refs / original /.
-f забезпечить виконання операції. Це необхідно, якщо тимчасовий каталог уже присутній або якщо вже є посилання, що зберігаються в refs / original. Якщо це не так, ви можете скинути цей прапор.
- відокремлює параметри фільтрування-гілки від параметрів редагування.
--all забезпечить перезапис усіх гілок та тегів.
Завдяки резервній копії ваших старих посилань ви можете легко повернутися до стану перед виконанням команди.
Скажімо, ви хочете відновити свого майстра та отримати до нього доступ у гілці old_master:
git checkout -b old_master refs / original / refs / heads / master
|
Використовуйте
git commit --amend
Щоб детально це зрозуміти, чудовий допис - 4. Переписування історії Git. У ньому також йдеться про те, коли не використовувати git commit --amend.
|
Якщо це ваш останній коміт, просто внесіть зміни до коміту:
git commit --amend -o -m "Нове повідомлення про коміт"
(Використовуючи прапорець -o (--only), щоб переконатися, що ви змінюєте лише повідомлення про фіксацію)
Якщо це захований коміт, скористайтеся чудовою інтерактивною базою даних:
git rebase -i @ ~ 9 # Показати останні 9 комітів у текстовому редакторі
Знайдіть потрібний коміт, змініть вибір на r (переформулювати), збережіть і закрийте файл. Готово!
Мініатюрний підручник Vim (або, як перебазувати лише 8 натискань клавіш 3jcwrEscZZ):
Запустіть vimtutor, якщо у вас є час
hjkl відповідають клавішам переміщення ← ↓ ↑ →
Усі команди можуть мати префікс "діапазон", напр. 3j рухається вниз на три рядки
i для переходу в режим вставки - текст, який ви вводите, з'явиться у файлі
Esc або Ctrlc для виходу з режиму вставки та повернення до "нормального" режиму
u, щоб скасувати
Ctrlr, щоб повторити
dd, dw, dl, щоб видалити відповідно рядок, слово або букву
cc, cw, cl, щоб змінити рядок, слово або букву відповідно (так само, як ddi)
yy, yw, yl, щоб скопіювати ("yank") рядок, слово або букву відповідно
p або P вставити після або перед поточним положенням відповідно
: wВведіть, щоб зберегти (записати) файл
: q! Введіть, щоб вийти, не зберігаючи
: wqEnter або ZZ, щоб зберегти та вийти
Якщо ви багато редагуєте текст, перейдіть на розкладку клавіатури Dvorak, навчіться натискати та вивчіть Vim. Чи варто цього докладати зусиль? Так.
ProTip ™: Не бійтеся експериментувати з "небезпечними" командами, які переписують історію * - Git не видаляє ваші коміти протягом 90 днів за замовчуванням; Ви можете знайти їх у перегляді:
$ git reset @ ~ 3 # Поверніть назад три коміти
$ git reflog
c4f708b HEAD @ {0}: скидання: перехід до @ ~ 3
2c52489 HEAD @ {1}: коміт: більше змін
4a5246d HEAD @ {2}: коміт: внесіть важливі зміни
e8571e4 HEAD @ {3}: коміт: внесіть деякі зміни
... попередні коміти ...
$ git скинути 2c52489
... і ти повернувся там, з чого почав
* Слідкуйте за такими параметрами, як - жорсткий та --force, хоча - вони можуть відкидати дані.
* Крім того, не переписуйте історію в будь-яких гілках, з якими ви співпрацюєте.
|
Поправити
У вас є параваріанти тут. Ви можете зробити
git commit --amend
поки це ваш останній коміт.
Інтерактивне перебазування
В іншому випадку, якщо це не ваш останній коміт, ви можете зробити інтерактивне перебазування,
git rebase -i [розгалужений_від] [хеш перед комітом]
Потім всередині інтерактивної бази даних ви просто додаєте редагування до цього коміту. Коли воно з’явиться, зробіть git commit --amend та змініть повідомлення коміту. Якщо ви хочете відкотитись до цієї точки коміту, ви також можете використовувати git reflog і просто видалити цей коміт. Тоді ви просто знову робите git-коміт.
|
Якщо ви використовуєте графічний інтерфейс Git, ви можете внести зміни до останнього коміту, який не було натиснуто:
Фіксувати / Вносити зміни Останній коміт
|
Я використовую графічний інтерфейс Git, наскільки можу, і це дає вам можливість змінити останній коміт:
Крім того, git rebase -i origin / master - це приємна мантра, яка завжди представлятиме вам комміти, які ви зробили поверх master, і надає вам можливість вносити зміни, видаляти, змінювати порядок чи сквош. Не потрібно спочатку заволодіти цим хешем.
|
Ого, тому існує безліч способів це зробити.
Ще один спосіб зробити це - видалити останній коміт, але збережіть його зміни, щоб не втратити свою роботу. Потім ви можете зробити ще один коміт із виправленим повідомленням. Це виглядало б приблизно так:
git reset --soft HEAD ~ 1
git commit -m 'Нове та виправлене повідомлення про коміт'
Я завжди роблю це, якщо забув додати файл або внести зміни.
Не забудьте вказати --soft замість --hard, інакше ви повністю втратите цей коміт.
|
Для тих, хто шукає графічний інтерфейс Windows / Mac для редагування старих повідомлень (тобто не лише останнього повідомлення), я рекомендую Sourcetree. Кроки, які слід виконати, знаходяться під зображенням.
Для комітів, які ще не були передані на пульт:
Переконайтеся, що ви внесли або сховали всі поточні зміни (тобто, щоб на вкладці "Статус файлу" не було файлів) - інакше це не спрацює.
На вкладці "Журнал / Історія" клацніть правою кнопкою миші запис із сусіднім рядком на графіку під комітом, який ви хочете відредагувати, і виберіть "Перебазувати дочірні елементи  інтерактивно ..."
Виберіть весь рядок для повідомлення про коміт, яке ви хочете змінити (натисніть на стовпець "Повідомлення").
Натисніть кнопку "Редагувати повідомлення".
Відредагуйте повідомлення за бажанням у діалоговому вікні, що з’явиться, а потім натисніть OK.
Повторіть кроки 3-4, якщо є інші повідомлення коміту для зміни.
Натисніть OK: Перебазування розпочнеться. Якщо все добре, результат закінчиться "Завершено успішно". ПРИМІТКА. Іноді я бачив цю помилку, оскільки не вдалося створити 'project_path / .git / index.lock': файл існує. при спробі одночасно змінити кілька повідомлень про коміти. Не впевнений, у чому саме полягає проблема чи вона буде виправлена ​​у майбутній версії Sourcetree, але якщо це трапиться, рекомендується перебазувати їх по одному (повільніше, але здається надійнішим).
... Або ... для комітів, які вже були просунуті:
Виконайте кроки в цій відповіді, подібні до наведених вище, але вимагають запуску подальшої команди з командного рядка (git push origin  -f), щоб примусово натиснути гілку. Я б рекомендував прочитати це все та дотримуватися необхідної обережності!
|
Якщо ви просто хочете відредагувати останню коміт, використовуйте:
git commit --amend
або
git commit --amend -m 'одне рядкове повідомлення'
Але якщо ви хочете редагувати кілька комітів поспіль, замість цього слід використовувати перебазування:
git rebase -i <хеш одного коміту перед неправильним комітом>
У файлі, подібному до наведеного вище, напишіть edit / e або один з інших параметрів і натисніть "Зберегти" та "Вийти".
Тепер ви будете в першому неправильному коміті. Внесіть зміни у файли, і вони будуть автоматично встановлені для вас. Тип
git commit --amend
Збережіть і закрийте це та введіть
git rebase - продовжити
щоб перейти до наступного виділення, доки не закінчите всі вибрані вами дії.
Зверніть увагу, що ці речі змінюють усі ваші хеші SHA після цього конкретного коміту.
|
Якщо ви хочете змінити лише останнє повідомлення, вам слід використовувати прапор --only або його ярлик -o з комітом --amend:
git commit --amend -o -m "Нове повідомлення про коміт"
Це гарантує, що ви випадково не вдосконалите свій коміт за допомогою інсценізованих матеріалів. Звичайно, найкраще мати належну конфігурацію $ EDITOR. Тоді ви можете залишити опцію -m, і Git попередньо заповнить повідомлення коміту старим. Таким чином його можна легко редагувати.
|
Оновіть своє останнє неправильне повідомлення про коміт новим повідомленням про коміт в один рядок:
git commit --amend -m "ваше нове повідомлення про коміт"
Або спробуйте Git reset, як показано нижче:
# Ви можете скинути свою голову на n кількість комітів
# НЕ хороша ідея для зміни останнього повідомлення коміту,
# але ви можете отримати ідею розділити коміт на кілька комітів
git reset --soft HEAD ^
# Це скине ваш останній коміт. Тепер ти
# може повторно зафіксувати це повідомлення за допомогою нового повідомлення коміту.
Використання скидання для розділення комітів на менші коміти
git reset може допомогти вам також розбити один коміт на кілька комітів:
# Скиньте голову. Я скидаю до останніх комітів:
git reset --soft HEAD ^
# (Ви можете скинути кілька комітів, виконавши HEAD ~ 2 (кількість комітів)
# Тепер скиньте свою голову нарозділивши його на кілька комітів
git скинути HEAD
# Додайте та фіксуйте свої файли окремо, щоб зробити кілька комітів: наприклад
git add app /
git commit -m "додати всі файли в каталог додатків"
git add config /
git commit -m "додати всі файли в каталог конфігурації"
Тут ви успішно розбили свій останній коміт на два коміти.
|
На це питання є багато відповідей, але жодна з них не детально пояснює, як змінити старіші повідомлення комітів за допомогою Vim. Я застряг у спробі зробити це сам, тому тут я докладно напишу, як я це зробив спеціально для людей, які не мають досвіду роботи у Vim!
Я хотів змінити свої п'ять останніх комітів, які я вже надсилав на сервер. Це досить «небезпечно», тому що якщо хтось інший вже витягнув це, ви можете зіпсувати речі, змінивши повідомлення комітів. Однак, коли ви працюєте над власною маленькою гілкою і впевнені, що її ніхто не тягнув, ви можете змінити її так:
Скажімо, ви хочете змінити свої п’ять останніх комітів, а потім введіть це в терміналі:
git rebase -i HEAD ~ 5
* Де 5 - це кількість повідомлень про коміти, які ви хочете змінити (тому, якщо ви хочете змінити 10-е на останнє комітування, ви вводите 10).
Ця команда приведе вас до Vim, там ви зможете "редагувати" свою історію комітів. Ви побачите свої останні п’ять комітів угорі так:
вибрати <коміт фіксації> повідомлення коміту
Замість вибору вам потрібно написати переформулювання. Ви можете зробити це у Vim, набравши i. Це змушує вас перейти в режим вставки. (Ви бачите, що ви перебуваєте в режимі вставки за словом INSERT внизу.) Для комітів, які потрібно змінити, введіть reword замість pick.
Потім потрібно зберегти та вийти з цього екрана. Ви робите це, спершу перейшовши в «командний режим», натиснувши клавішу Esc (ви можете перевірити, чи перебуваєте ви в командному режимі, якщо слово INSERT внизу зникло). Потім ви можете ввести команду, набравши:. Команда для збереження та виходу - wq. Тож якщо ви введете: wq, ви на правильному шляху.
Тоді Vim перегляне кожне повідомлення коміту, яке ви хочете переформулювати, і тут ви зможете фактично змінити повідомлення коміту. Ви зробите це, перейшовши в режим вставки, змінивши повідомлення про фіксацію, перейшовши в командний режим, а також збереживши та вийшовши. Зробіть це п’ять разів, і ви вийшли з Vim!
Потім, якщо ви вже проштовхували свої неправильні коміти, вам потрібно git push --force, щоб перезаписати їх. Пам'ятайте, що git push --force є досить небезпечною справою, тому переконайтеся, що ніхто не витягував з сервера, оскільки ви натиснули на неправильні коміти!
Тепер ви змінили повідомлення про коміти!
(Як бачите, я не такий досвідчений у Vim, тому, якщо я використав неправильне "жаргон" для пояснення того, що відбувається, сміливо виправте мене!)
|
Ви можете використовувати git-rebase-reword
Він призначений для редагування будь-якого коміту (а не лише останнього) так само, як коміт --amend
$ git rebase-reword 
Він названий на честь дії щодо перебазування інтерактиву для внесення змін до коміту: "reword". Перегляньте цю публікацію та інтерактивний режим розділу man-
Приклади:
$ git rebase-reword b68f560
$ git rebase-reword HEAD ^
|
Я додав псевдоніми reci і recm для повторного прийняття (внесення змін). Тепер я можу це зробити за допомогою git recm або git recm -m:
$ vim ~ / .gitconfig
[псевдонім]
......
см = здійснити
reci = commit --amend
recm = commit --amend
......
|
Я зрозумів, що підштовхнув фіксацію з помилкою. Щоб скасувати, я зробив наступне:
git commit --amend -m "T-1000, вдосконалений прототип"
git push --force
Попередження: примусове натискання на ваші зміни замінить віддалену гілку на вашу локальну. Переконайтеся, що ви не збираєтеся перезаписувати щось, що хочете зберегти. Також будьте обережні з примусовим натисканням на змінений (переписаний) коміт, якщо хтось інший ділиться з вами гілкою, тому що їм доведеться переписати власну історію, якщо у них є стара копія коміту, яку ви щойно переписали.
|
Мені подобається використовувати наступне:
git статус
git add --all
git commit -am "тут йде повідомлення про зміни"
git pull <початковий майстер>
git push <початковий майстер>
|
Якщо ви не надіслали код у віддалену гілку (GitHub / Bitbucket), ви можете змінити повідомлення коміту в командному рядку, як показано нижче.
git commit --amend -m "Ваше нове повідомлення"
Якщо ви працюєте над певною гілкою, зробіть це:
git commit --amend -m "ІМЯ ФІЛІЇ: нове повідомлення"
Якщо ви вже надіслали код із неправильним повідомленням, і ви повинні бути обережними при зміні повідомлення. Тобто, після того, як ви змінили повідомлення коміту та спробували його натиснути ще раз, у вас виникають проблеми. Щоб зробити це гладким, виконайте наступні дії.
Будь ласка, прочитайте всю мою відповідь, перш ніж це робити.
git commit --amend -m "ІМЯ ВІДДІЛЕННЯ: ваше нове повідомлення"
git push -f origin BRANCH-NAME # Не найкраща практика. Прочитайте нижче, чому?
Важливе зауваження: При безпосередньому застосуванні силового натискання у вас можуть виникнути проблеми з кодом, які інші розробники працюють над тією ж гілкою. Тому, щоб уникнути цих конфліктів, вам потрібно витягнути код з вашої гілки, перш ніж робити силунатиснути:
git commit --amend -m "ІМЯ ВІДДІЛЕННЯ: ваше нове повідомлення"
git pull origin ІМЯ ФІЛІЇ
git push -f origin BRANCH-NAME
Це найкраща практика при зміні повідомлення коміту, якщо воно вже було надіслане.
|
Не відповідь, яку ви шукаєте? Перегляньте інші запитання з тегами git git-commit git-rewrite-history змінити або задати власне запитання.